/**
 * 安全的两数相除函数
 * @param dividend - 被除数
 * @param divisor - 除数
 * @param precision - 保留小数位数（默认不处理）
 * @returns 返回商数，如果除数为0则返回Infinity或-Infinity
 * @throws 如果参数不是有效数字会抛出TypeError
 * 
 * @example
 * divide(10, 3);     // 3.3333333333333335
 * divide(10, 3, 2);  // 3.33
 * divide(10, 0);     // Infinity
 * divide(-10, 0);    // -Infinity
 */
export function divide(dividend: number, divisor: number, precision?: number): number {

    if (typeof dividend !== 'number' || typeof divisor !== 'number') {
      throw new TypeError('Both dividend and divisor must be numbers');
    }
  
    if (divisor === 0) {
      return dividend === 0 ? NaN : (dividend > 0 ? Infinity : -Infinity);
    }
  
    let result = dividend / divisor;
  
    // 处理精度
    if (typeof precision === 'number' && precision >= 0) {
      const factor = 10 ** precision;
      result = Math.round(result * factor) / factor;
      
      if (Math.abs(result) < Number.MAX_SAFE_INTEGER) {
        result = Number(result.toFixed(precision));
      }
    }
  
    return result;
  }